home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl760 / scnp785j.lzh / CURVEGEN.BAS < prev    next >
BASIC Source File  |  1991-08-19  |  3KB  |  70 lines

  1. 10 REM  PROGRAM CURVEGEN GENERATES VALUES OF A 3D CURVE.
  2. 20 REM  THE PROGRAM WRITES THE VALUES ALONG WITH PLOT COMMANDS TO A FILE
  3. 30 REM  NAMED CURVDATA.PLT; THE VALUES ARE THEN PLOTTED BY USING THE SHELL
  4. 40 REM  COMMAND TO RUN THE SPLOT PROGRAM.
  5. 50 REM
  6. 80 REM  WARNING: DO NOT RENUMBER!
  7. 90 REM
  8. 100 CLS: KEY OFF
  9. 110 PRINT"This program plots a curve in three dimensions.  The curve is"
  10. 120 PRINT"defined parametrically by a subroutine which must follow the"
  11. 130 PRINT"main program.  The subroutine must set variables X, Y and Z"
  12. 140 PRINT"equal to functions of the parameter T."
  13. 150 PRINT
  14. 160 PRINT"List lines 1000-1999 to see current equations."
  15. 180 REM
  16. 190 OPEN "CURVDATA.PLT" FOR OUTPUT AS #2
  17. 200 PRINT: LINE INPUT"Title? "; TITLE$: PRINT#2,"TITLE "+TITLE$
  18. 205 PRINT: LINE INPUT"Z-Axis Label? "; LZ$: PRINT#2,"ZLABEL "+LZ$
  19. 210 LINE INPUT"X-Axis Label? ";LX$: PRINT#2,"XLABEL "+LX$
  20. 220 LINE INPUT"Y-Axis Label? ";LY$: PRINT#2,"YLABEL "+LY$
  21. 222 PRINT: INPUT"Log Z-Axis (N/Y)"; A$: A$=LEFT$(A$,1)
  22. 224 IF A$="Y" OR A$="y" THEN PRINT#2,"LOGZ"
  23. 230 INPUT"Log X-Axis (N/Y)"; A$: A$=LEFT$(A$,1)
  24. 240 IF A$="Y" OR A$="y" THEN PRINT#2,"LOGX"
  25. 250 INPUT"Log Y-Axis (N/Y)"; A$: A$=LEFT$(A$,1)
  26. 260 IF A$="Y" OR A$="y" THEN PRINT#2,"LOGY"
  27. 290 REM
  28. 350  PRINT
  29. 360  PRINT"Enter initial value, final value & step size of parameter ";
  30. 372  PRINT"separated by spaces"
  31. 390  INPUT V$: IF V$="" GOTO 470
  32. 400   GOTO 420
  33. 410    INPUT"Initial Value, Final Value, Step Size"; V$: IF V$="" GOTO 470
  34. 420   P=1: GOSUB 680: TI. = V: GOSUB 680: TF. = V: GOSUB 680: TS. = V
  35. 430   IF TS. <= 0 THEN PRINT"ERROR: INVALID STEP SIZE": GOTO 410
  36. 440   ND. = INT( (TF.-TI.)/TS. + 1.5 )
  37. 450   IF ND. < 2 THEN PRINT"ERROR: INVALID RANGE": GOTO 410
  38. 460   IF ND. > 1024 THEN PRINT"ERROR: TOO MANY POINTS - MAX IS 1024": GOTO 410
  39. 470  PRINT:PRINT"Calculating..."
  40. 480  PRINT#2,"READXYZ ";ND.
  41. 490  FOR I.=1 TO ND.
  42. 500   T = TI. + (I.-1)*TS.
  43. 510   GOSUB 1100
  44. 520   PRINT#2, X;" ";Y;" ";Z
  45. 530  NEXT I.
  46. 540 PRINT#2,"PLOT3D CURVE": PRINT#2,"KEYBOARD"
  47. 550 CLOSE#2
  48. 560 REM
  49. 570 PRINT:PRINT"Press the ENTER key to display the plot";
  50. 580 PRINT" - press the ESC key to clear the plot."
  51. 590 A$=INKEY$: IF A$<>"" GOTO 590
  52. 600 A$=INKEY$: IF A$="" GOTO 600
  53. 610 IF ASC(A$)<>13 GOTO 600
  54. 620 SHELL( "SPLOT CURVDATA.PLT" )
  55. 630 END
  56. 670 REM EXTRACTS V FROM V$ STARTING AT POSITION P
  57. 680 P2=LEN(V$)
  58. 690 IF MID$(V$,P,1)=" " AND P<=P2 THEN P=P+1: GOTO 690
  59. 700 P0=P: IF P0>P2 THEN V=0: RETURN
  60. 710 IF MID$(V$,P,1)<>" " AND P<=P2 THEN P=P+1: GOTO 710
  61. 720 V = VAL( MID$( V$, P0, P-P0 ) )
  62. 730 RETURN
  63. 1000 REM
  64. 1010 REM NOTE: To avoid conflict with main program variables,
  65. 1020 REM       do not use variable names that contain a period.
  66. 1030 REM
  67. 1100 REM Subroutine must set X=f1(T), Y=f2(T), Z=f3(T) after this line #
  68. 1110 X = T * SIN(T): Z = T * COS(T): Y = T
  69. 1190 RETURN
  70.